//leetcode第50题，实现pow(x,n)函数，前面这个全是特判写出来的
//下面这个用快速幂算法写出的
#include <bits/stdc++.h>
using namespace std;
// class Solution {
// public:
//     double myPow(double x, int n) {
//         if(x==0||n==INT_MIN)return 0.0;
//         if(n==0||x==1)return 1.0;
//         if(x==-1&&n%2==0)return 1.0;
//         if(x==-1)return -1.0;
//         bool sym=(x>0||x<0&&abs(n)%2==0)?true:false;
//         bool sym1=n>0?true:false;
//         double temp1=abs(x);
//         double temp2=abs((double)n);
//         for(int i=0;i<temp2-1;i++)
//         {
//             temp1*=abs(x);
//         }
//         if(sym1)return sym?temp1:-temp1;
//         else return sym?1/temp1:-1/temp1;
//     }
// };

class Solution {
public:
    double myPow(double x, int n) {
        long long k=n;
        double ans=1;
        if(k<0)
        {
            x=1/x;
            k=-k;
        }
        while(k)
        {
            if(k&1)ans*=x;
            x*=x;
            k>>=1;
        }
        return ans;
    }
};
